home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The PC-SIG Library 10
/
The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso
/
PC_SIGCD
/
05
/
6
/
DISK0564.ZIP
/
SOURCE.ARC
/
ASM.ARC
/
UTIL.ASM
< prev
Wrap
Assembly Source File
|
1987-11-01
|
4KB
|
148 lines
TITLE GENERAL-PURPOSE MSDOS UTILITIES
.XLIST
INCLUDE ASCII.DEF
.LIST
DOSSEG
.MODEL SMALL
.CODE
EXTRN COUT:NEAR
PUBLIC UC,UCSTR,SKIPSP,CPY,CPYCNT,TYPTX,FILL,ZERO
PUBLIC CMDSRC
; COMMON ASSEMBLY-LANGUAGE UTILITY ROUTINES
; UC = CONVERT CHARACTER IN AL TO UPPER-CASE
;
UC PROC NEAR
CMP AL,'a'
JC SHORT UC1
CMP AL,'z'+1
JNC SHORT UC1
SUB AL,'a'-'A'
UC1: RET
UC ENDP
; UCSTR = CONVERT A LINE (0-TERMINATED) TO UPPER-CASE
;
; ENTRY: DS:BX POINTS TO THE LINE
; EXIT: LINE CONVERTED, BX IS UNCHANGED
; USES: AL,FLAGS
;
UCSTR PROC NEAR
PUSH BX
UCSTR0: MOV AL,BYTE PTR [BX]
CALL UC
MOV BYTE PTR [BX],AL
INC BX
CMP AL,0
JNE UCSTR0
POP BX
RET
UCSTR ENDP
; SKIPSP = SKIP OVER BLANKS AND TABS
; ENTRY: [BX] POINTS TO CHAR. STRING
; EXIT: [BX] POINTS TO 1ST NON-BLANK CHAR., OR NULL
; AL = 1ST NON-BLANK CHAR.
; 'C' FLAG SET IF AL=NULL.
;
SKIPSP PROC NEAR
JMP SHORT SKIPS1
SKIPS0: INC BX
SKIPS1: MOV AL,BYTE PTR [BX]
CMP AL,SPACE
JE SKIPS0
CMP AL,TAB
JE SKIPS0
CMP AL,0
JE SKIPS2
CLC ;CLEAR CARRY
RET
SKIPS2: STC
RET
SKIPSP ENDP
; CPY = COPY CX BYTES FROM (SI) TO (DI)
;
CPY PROC NEAR
CLD
REP MOVSB
RET
CPY ENDP
; CPYCNT = COPY FROM (DS:SI) TO (ES:DI) UNTIL 0 BYTE TRANSFERRED
; TRANSFERS CX BYTES MAXIMUM
;
CPYCNT PROC NEAR
CLD
CPYC0: LODSB
STOSB
CMP AL,0
JE SHORT CPYC1
LOOP CPYC0
CPYC1:
RET
CPYCNT ENDP
; ZERO = CLEAR MEMORY (CX BYTES, STARTING AT ES:DI)
;
ZERO PROC NEAR
MOV AL,0
; FILL = FILL MEMORY (CX BYTES, STARTING AT ES:DI) WITH AL
;
FILL: CLD
REP STOSB
RET
ZERO ENDP
; TYPTX = TYPE TEXT IN LINE
; LAST CHAR. HAS BIT [7] SET
;
TYPTX PROC NEAR
PUSH BP ;SAVE REGISTERS
PUSH BX
MOV BP,SP
MOV BX,[BP+4] ;GET OFFSET OF DATA
DEC BX ;COMPENSATE FOR NEXT INC
TYPTX1: INC BX ;BUMP POINTER
MOV AL,BYTE PTR CS:[BX] ;FETCH A CHAR.
AND AL,7FH ;STRIP HI BIT
CALL COUT ;PRINT IT
CMP AL,BYTE PTR CS:[BX] ;SEE IF HI BIT WAS SET
JE TYPTX1 ;IF NOT, KEEP GOING
INC BX ;POINT 1 PAST END OF STRING
MOV [BP+4],BX ;FIX OFFSET IN RETURN LINK
POP BX
POP BP ;RESTORE REGISTERS
RET
TYPTX ENDP
; CMDSRC = SEARCH FOR COMMAND IN LIST
; ENTRY: AL = COMMAND LETTER
; BX POINTS TO LIST (0 BYTE ENDS IT)
; EXIT: AL = NUMBER OF COMMAND IN LIST, IF FOUND
; AL = 0 IF NO MATCH
;
CMDSRC PROC NEAR
PUSH CX
MOV CL,0
MOV CH,AL
CMDSR1: MOV AL,BYTE PTR [BX]
CMP AL,0
JE SHORT NOMATCH
CMP AL,CH
PUSHF
INC BX
INC CL
POPF
JNZ CMDSR1
MOV AL,CL
NOMATCH:
POP CX
RET
CMDSRC ENDP
END